/** 
 *  @file FuncPtrHelper.h
 *
 *  Contains macros to help declaring the function pointer classes in FuncPtrT.h
 */
#ifndef _FUNCPTRHELPER_H_
#define _FUNCPTRHELPER_H_

/* template argument types */
#define ARGTYPE_0 
#define ARGTYPE_1  typename A1 
#define ARGTYPE_2  typename A1, typename A2
#define ARGTYPE_3  typename A1, typename A2, typename A3
#define ARGTYPE_4  typename A1, typename A2, typename A3, typename A4
#define ARGTYPE_5  typename A1, typename A2, typename A3, typename A4, typename A5
#define ARGTYPE_6  typename A1, typename A2, typename A3, typename A4, typename A5, typename A6
#define ARGTYPE_7  typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7
#define ARGTYPE_8  typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8
#define ARGTYPE_9  typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9
#define ARGTYPE_10 typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9, typename A10

/* argument types in function declaration */
#define ARGDECL_0 
#define ARGDECL_1  A1 
#define ARGDECL_2  A1, A2
#define ARGDECL_3  A1, A2, A3
#define ARGDECL_4  A1, A2, A3, A4
#define ARGDECL_5  A1, A2, A3, A4, A5
#define ARGDECL_6  A1, A2, A3, A4, A5, A6
#define ARGDECL_7  A1, A2, A3, A4, A5, A6, A7
#define ARGDECL_8  A1, A2, A3, A4, A5, A6, A7, A8
#define ARGDECL_9  A1, A2, A3, A4, A5, A6, A7, A8, A9
#define ARGDECL_10 A1, A2, A3, A4, A5, A6, A7, A8, A9, A10

/* argument types with argument names */
#define ARGP_0 
#define ARGP_1  A1 a1 
#define ARGP_2  A1 a1, A2 a2
#define ARGP_3  A1 a1, A2 a2, A3 a3
#define ARGP_4  A1 a1, A2 a2, A3 a3, A4 a4
#define ARGP_5  A1 a1, A2 a2, A3 a3, A4 a4, A5 a5
#define ARGP_6  A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6
#define ARGP_7  A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7
#define ARGP_8  A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8
#define ARGP_9  A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9
#define ARGP_10 A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10

/* argument names */
#define ARGA_0 
#define ARGA_1  a1 
#define ARGA_2  a1, a2
#define ARGA_3  a1, a2, a3
#define ARGA_4  a1, a2, a3, a4
#define ARGA_5  a1, a2, a3, a4, a5
#define ARGA_6  a1, a2, a3, a4, a5, a6
#define ARGA_7  a1, a2, a3, a4, a5, a6, a7
#define ARGA_8  a1, a2, a3, a4, a5, a6, a7, a8
#define ARGA_9  a1, a2, a3, a4, a5, a6, a7, a8, a9
#define ARGA_10 a1, a2, a3, a4, a5, a6, a7, a8, a9, a10

#endif
